﻿#ifndef DLGREPORT_H
#define DLGREPORT_H

#include <QDialog>
#include <QSettings>
#include <QGraphicsView>
#include <QPrinter>

#include "config/jsonconfig.h"
#include "graphicsitem/systemsetitem.h"
#include "graphicsitem/zeropositionstaticitem.h"
#include "graphicsitem/zeropositionitem.h"
#include "graphicsitem/pressurefeatureitem.h"
#include "graphicsitem/polarfeatureitem.h"
#include "graphicsitem/transientfeatureitem.h"
#include "graphicsitem/positionfeatureitem.h"
#include "graphicsitem/positionfeature1item.h"
#include "graphicsitem/positionfeature2item.h"
#include "graphicsitem/positionfeature3item.h"
#include "graphicsitem/freqa11item.h"
#include "graphicsitem/freqa12item.h"
#include "graphicsitem/freqa22item.h"
#include "graphicsitem/freqa24item.h"
#include "graphicsitem/freqw11item.h"
#include "graphicsitem/freqw12item.h"
#include "graphicsitem/freqw22item.h"
#include "graphicsitem/freqw24item.h"

namespace Ui {
class DlgReport;
}

class DlgReport : public QDialog
{
    Q_OBJECT

public:
    explicit DlgReport(QSettings* settings, JsonConfig* jsonConfig, QString subflowId, const QString& reportFileName, QWidget *parent = nullptr);
    ~DlgReport();

private:
    void initUI();
    void initGraphics();
    void init();
    void readData();
    void addSystemSet(const int level, const QString type);
    void addZeroPositionStatic(const int level);
    void addZeroPosition(const int level);
    void addPressureFeature(const int levle);
    void addPolarFeature();
    void addTransientFeature(const int level);
    void addPositionFeature(const int level);
    void addPositionFeature1(const int level);
    void addPositionFeature2(const int level);
    void addPositionFeature3(const int level);
    void addFreq(const int level);

    void printPreview(QPrinter* printer);

private:
    Ui::DlgReport *ui;

    // 场景
    QGraphicsScene* m_scene;
    // 记录当前要绘制的高度
    int m_currentY;

private:
    // INI配置文件
    QSettings* m_settings;
    // JSON配置文件
    JsonConfig* m_jsonConfig;
    // 根据节点显示报表内容
    QString m_subflowId;

    // 报表文件名称
    QString m_reportFileName;

    // 系统设置
    QStringList m_systemSetList;
    // 伺服机构列表
    QStringList m_machineList;
    // 模拟数据
    QList<QStringList> m_reportValueList;


private slots:
    void onPrintPreview();
    void onSave();
};

#endif // DLGREPORT_H
